1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.testers;
18
19 import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
20 import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
21 import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
22 import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
23 import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
24 import static com.google.common.collect.testing.testers.Platform.listListIteratorTesterNumIterations;
25 import static java.util.Collections.singleton;
26
27 import com.google.common.annotations.GwtCompatible;
28 import com.google.common.annotations.GwtIncompatible;
29 import com.google.common.collect.testing.Helpers;
30 import com.google.common.collect.testing.IteratorFeature;
31 import com.google.common.collect.testing.ListIteratorTester;
32 import com.google.common.collect.testing.features.CollectionFeature;
33 import com.google.common.collect.testing.features.ListFeature;
34
35 import java.lang.reflect.Method;
36 import java.util.List;
37 import java.util.ListIterator;
38 import java.util.Set;
39 import java.util.concurrent.CopyOnWriteArraySet;
40
41
42
43
44
45
46
47
48
49 @GwtCompatible(emulated = true)
50 public class ListListIteratorTester<E> extends AbstractListTester<E> {
51
52
53 @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
54 @ListFeature.Require(absent = {SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX})
55 public void testListIterator_unmodifiable() {
56 runListIteratorTest(UNMODIFIABLE);
57 }
58
59
60
61
62
63 @CollectionFeature.Require(SUPPORTS_REMOVE)
64 @ListFeature.Require({SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX})
65 public void testListIterator_fullyModifiable() {
66 runListIteratorTest(MODIFIABLE);
67 }
68
69 private void runListIteratorTest(Set<IteratorFeature> features) {
70 new ListIteratorTester<E>(
71 listListIteratorTesterNumIterations(), singleton(samples.e4), features,
72 Helpers.copyToList(getOrderedElements()), 0) {
73 {
74
75 stopTestingWhenAddThrowsException();
76 }
77
78 @Override protected ListIterator<E> newTargetIterator() {
79 resetCollection();
80 return getList().listIterator();
81 }
82
83 @Override protected void verify(List<E> elements) {
84 expectContents(elements);
85 }
86 }.test();
87 }
88
89 public void testListIterator_tooLow() {
90 try {
91 getList().listIterator(-1);
92 fail();
93 } catch (IndexOutOfBoundsException expected) {
94 }
95 }
96
97 public void testListIterator_tooHigh() {
98 try {
99 getList().listIterator(getNumElements() + 1);
100 fail();
101 } catch (IndexOutOfBoundsException expected) {
102 }
103 }
104
105 public void testListIterator_atSize() {
106 getList().listIterator(getNumElements());
107
108 }
109
110
111
112
113
114
115
116
117
118 @GwtIncompatible("reflection")
119 public static Method getListIteratorFullyModifiableMethod() {
120 return Helpers.getMethod(
121 ListListIteratorTester.class, "testListIterator_fullyModifiable");
122 }
123
124
125
126
127
128
129 @GwtIncompatible("reflection")
130 public static Method getListIteratorUnmodifiableMethod() {
131 return Helpers.getMethod(
132 ListListIteratorTester.class, "testListIterator_unmodifiable");
133 }
134 }